package lion.crawl.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

/**
 * @author Helin
 * @date 2012-8-12
 * @email hl_0074@sina.com
 * @desc
 */
public class HtmlUtils {

	private static Pattern p = Pattern.compile("<a.*?href\\s*?=\\s*?[\"'](.*?)[\"']");

	public static String clean(String html) {

		if (StringUtils.isBlank(html)) { return ""; }
		return html.replaceAll("(?s)<script.*?</script>", "").replaceAll("<!--.*?-->", "").replaceAll("(?m)\\s+$", "");
	}

	public static List<String> findURLs(String url, String content) {

		List<String> pageUrls = new ArrayList<String>();
		Matcher m = p.matcher(HtmlUtils.clean(content));
		while (m.find()) {
			String r = m.group(1);
			if (r.startsWith("http") || r.startsWith(".") || r.startsWith("/") || r.matches("[^:]+") && !r.startsWith("#")) {
				pageUrls.add(normalize(url, m.group(1).replaceAll("#.*?$", "")));
			}
		}
		return pageUrls;
	}

	/**
	 * 处理页面url，使其成为网站绝对路径
	 */
	public static String normalize(String pageurl, String url) {

		if (url.startsWith("http")) { return url; }
		// 绝对路径
		if (!pageurl.startsWith("http")) {
			pageurl = "http://" + pageurl;
		}
		// 网站根路径
		if (url.startsWith("/")) { return pageurl.replaceAll("(http://.*?)/.*", "$1") + url; }

		if (StringUtils.countMatches(pageurl, "/") >= 3) {
			pageurl = pageurl.replaceAll("[^/]+?$", "");
		}
		if (!pageurl.endsWith("/")) {
			pageurl += "/";
		}
		// 本页面相对路径
		if (url.startsWith("../")) {
			while (url.startsWith("../") && StringUtils.countMatches(pageurl, "/") > 3) {
				url = url.replaceFirst("../", "");
				pageurl = pageurl.replaceAll("[^/]*?/$", "");
			}
			if (url.startsWith("../")) {
				url = url.replaceAll("../", "");
			}
		}

		// 和本页面目录相同路径
		if (url.startsWith("./")) {
			url = url.replaceAll("^./", "");
		}

		return pageurl + url;
	}
}
